## Example of Linker Script

When linking a sound object file, if you use linker script, it allows you more freedom for memory use. An example is provided below.

*Example of placing the work area for sound functions in external RAM, and placing the program in high speed internal RAM.

#### (1)First of all, make the default linker script for the development environment into a file (temporary name: ldscript.x).

        (From command line)
    	ld --verbose > ldscript.x

#### (2)Add "-Tldscript.x" to LDFLAGS of the "Makefile".

       (Example)
    	LDFLAGS += -Map $(MAPFILE) -nostartfiles \
    		-Ttext 0x08000000 -Tbss 0x03000000 -Tldscript.x \
    		-L../AgbLib -lagbsyscall -lisagbprn

#### (3)Delete the first 5 lines and last line of "ldscript.x".

      (*=Unnecessary lines)

    *  GNU ld version 2.9-arm-000512 (with BFD 2.9-arm-000512)
    *    Supported emulations:
    *     armelf
    *  using internal linker script:
    *  ==================================================
        OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
                  "elf32-littlearm")
        OUTPUT_ARCH(arm)
        ENTRY(_start)

        ...Omitted...

          .stack 0x80000 : { _stack = .; *(.stack) }
          /* These must appear regardless of  .  */
        }

    *  ==================================================

#### (4)Add the following description to the start of the SECTIONS instruction for "ldscript.x".

      (*=Added lines)

        SECTIONS
        {

    *    .bss.soundwork 0x0203e000 :
    *    {
    *      SoundDir/m4aLib.o(.bss)
    *      SoundDir/SoundDat.o(.bss)
    *      SoundDir/m4aLib.o(COMMON)
    *      SoundDir/SoundDat.o(COMMON)
    *    }

    *    .bss.soundcode 0x03007000 :
    *    {
    *      SoundDir/m4aLib.o(.bss.code)
    *    }

          /* Read-only sections, merged into text segment: */
          . = 0x8000;
       ...Omitted following

         * Among the added lines, SoundDir is the directory where the
           sound object exists so change to an appropriate name.

         * Specify a location so addresses do not conflict with other
           areas such as 0x0203e000 and 0x03007000.

         * With LDFLAGS for the "Makefile" if you have
           specified "-Tbss 0x02000000", the .bss.soundwork
           block can be omitted. Or if "-Tbss 0x03000000"
           is specified, the .bss.soundcode block can be omitted.

#### (5) Complete the process by using "make" with the preceding information.

Next:[ AGB System Sound Circuits(Other useful background information)] Back:[ Using Sound Code in System ROM ] Top :[ Table of Contents ]